Bulb switcher II¶
Time: O(1); Space: O(1); medium
There is a room with N lights which are turned on initially and 4 buttons on the wall. After performing exactly M unknown operations towards buttons, you need to return how many different kinds of status of the N lights could be.
Suppose N lights are labeled as number [1, 2, 3 …, N], function of these 4 buttons are given below:
Flip all the lights.
Flip lights with even numbers.
Flip lights with odd numbers.
Flip lights with (3k + 1) numbers, k = 0, 1, 2, …
Example 1:
Input: n = 1, m = 1
Output: 2
Explanation:
Status can be: [on], [off]
Example 2:
Input: n = 2, m = 1
Output: 3
Explanation:
Status can be: [on, off], [off, on], [off, off]
Example 3:
Input: n = 3, m = 1
Output: 4
Explanation:
Status can be: [off, on, off], [on, off, on], [off, off, off], [off, on, on].
[1]:
class Solution1(object):
def flipLights(self, n, m) -> int:
"""
:type n: int
:type m: int
:rtype: int
"""
if m == 0: return 1
if n == 1: return 2
if m == 1 and n == 2: return 3
if m == 1 or n == 2: return 4
if m == 2: return 7
return 8
[2]:
s = Solution1()
n, m = 1, 1
assert s.flipLights(n, m) == 2
n, m = 2, 1
assert s.flipLights(n, m) == 3
n, m = 3, 1
assert s.flipLights(n, m) == 4